package com.atguigu.gmall.product.service;

import com.alibaba.fastjson.JSONObject;
import com.atguigu.gmall.model.product.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author tongatong
 * @name ManageService
 * @description
 * @date 2021/9/7
 * @time 19:07
 */
public interface ManageService {
    //查询所有的一级分类信息
    List<BaseCategory1> getCategory1();
    //查询所有的二级分类信息
    List<BaseCategory2> getCategory2(Long category1Id);
    //查询所有的三级分类信息
    List<BaseCategory3> getCategory3(Long category2Id);
    //查询所有平台属性数据
    List<BaseAttrInfo> attrInfoList(Long category1Id, Long category2Id, Long category3Id);
    //添加平台属性
    void saveAttrInfo(BaseAttrInfo baseAttrInfo);
    //根据attrId，获取所有属性
    BaseAttrInfo getAttrInfo(Long attrId);
    //分页获取商品表信息
    IPage<SpuInfo> getSpuInfoPage(Page<SpuInfo> spuInfoPage, SpuInfo spuInfo);
     //查询所有的销售属性数据
    List<BaseSaleAttr> getBaseSaleAttrList();
    //保存spu
    void saveSpuInfo(SpuInfo spuInfo);
    //根据spuId, 获取图片列表集合
    List<SpuImage> getSpuImageList(Long spuId);
    //根据spuid,获取该商品所有销售属性
    List<SpuSaleAttr> getSpuSaleAttrList(Long spuId);
    //保存sku信息
    void saveSkuInfo(SkuInfo skuInfo);
    //SKU分页列表
    IPage<SkuInfo> getPage(Page<SkuInfo> pageParam);
    //商品上架
    void onSale(Long skuId);
    //商品下架
    void cancelSale(Long skuId);
    //根据skuId获取sku信息
    SkuInfo getSkuInfo(Long skuId);
    //通过三级分类id，查询分类信息
    BaseCategoryView getCategoryViewByCategory3Id(Long category3Id);
    //获取sku最新价格
    BigDecimal getSkuPrice(Long skuId);
    //根据spuId，skuId 查询销售属性集合
    List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(Long skuId, Long spuId);
    //根据spuId 查询map 集合属性
    Map<Object, Object> getSkuValueIdsMap(Long spuId);
    //根据spuId 获取海报数据
    List<SpuPoster> getSpuPosterBySpuId(Long spuId);
    //通过skuId 集合来查询数据
    List<BaseAttrInfo> getAttrList(Long skuId);
    //获取所有分类信息
    List<JSONObject> getBaseCategoryList();
    //通过品牌Id 集合来查询数据
    BaseTrademark getTrademarkByTmId(Long tmId);
}
